/**
 * @(#)ITaskInstanceQueryDAO.java Aug 31, 2009
 *   
 * Copyright  (c) 2009-2010 Wilmar IT Service,  Inc.   
 * All  rights  reserved.   
 * TODO
 */

package com.wilmar.process.dao.api;

import java.util.List;
import java.util.Set;

import org.jbpm.api.task.Task;

import com.wilmar.process.entity.query.ProcessTakenTaskQueryObject;
import com.wilmar.process.entity.query.ProcessUnassignTaskQueryObject;

/**
 * @author MaKuBEX Email:makubexnet@gmail.com
 * @version 1.0.0
 */
public interface ITaskInstanceQueryDAO extends IBaseDAO<Task, String> {
	/**
	 * 根据用户ID获取当前用户已经接收的任务的数量
	 * 
	 * @param userId
	 *            用户ID
	 * @return 已经接收的任务的数量
	 */
	public Long getTakenTaskCountByUserId(String userId);

	/**
	 * 根据提供的系统资源实体ID获取这些ID可以接收的任务实例的数量
	 * 
	 * @param idSet
	 *            资源实体ID
	 * @return 可以接收的任务实例的数量
	 */
	public Long getUnAssignedTaskCountByIdSet(Set<String> idSet);

	/**
	 * 
	 * 
	 * @param queryObject
	 *            查询对象
	 * @return 待处理的任务列表
	 */

	/**
	 * 根据查询对象，动态查找对应的待处理任务列表
	 * 
	 * @param queryObject
	 *            查询对象
	 * @param userIdSet
	 *            候选者集合
	 * @return 待处理的任务列表
	 */
	public List<Task> getUnassignTaskListByQueryObject(
			ProcessUnassignTaskQueryObject queryObject, Set<String> userIdSet);

	/**
	 * 根据查询对象，动态查找对应的已接收任务列表
	 * 
	 * @param queryObject
	 *            查询对象
	 * @param userId
	 *            已分配的用户
	 * @return 已接收的任务列表
	 */
	public List<Task> getTakenTaskListByQueryObject(
			ProcessTakenTaskQueryObject queryObject, String userId);
}
